package com.example.admin.myapplication;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    TextView title;
    Button btn_0;
    Button btn_00;
    Button btn_1;
    Button btn_2;
    Button btn_3;
    Button btn_4;
    Button btn_5;
    Button btn_6;
    Button btn_7;
    Button btn_8;
    Button btn_9;
    Button btn_point;
    Button btn_clear;
    Button btn_pay;
    Button btn_plus;
    EditText ed_m;

    String existedText = "";

    boolean isCounted = false;

    boolean startWithOperator = false;

    boolean startWithSubtract = false;

    boolean noStartWithOperator = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        title = (TextView)findViewById(R.id.tv_iv_nac_base_top_title);
        title.setText("输入结账金额");
        initView();
        initEvent();


    }

    private void initView() {

        btn_00 = (Button) findViewById(R.id.btn_00);
        btn_0 = (Button) findViewById(R.id.btn_0);
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_9 = (Button) findViewById(R.id.btn_9);

        btn_plus = (Button) findViewById(R.id.btn_plus);
        btn_pay = (Button) findViewById(R.id.btn_pay);

        btn_point = (Button) findViewById(R.id.btn_point);
        btn_clear = (Button) findViewById(R.id.btn_clear);

        ed_m = (EditText) findViewById(R.id.ed_m);
        ed_m.setCursorVisible(false);

        existedText = ed_m.getText().toString();

    }


    private void initEvent() {
        btn_00.setOnClickListener(this);
        btn_0.setOnClickListener(this);
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);

        btn_plus.setOnClickListener(this);
        btn_pay.setOnClickListener(this);

        btn_point.setOnClickListener(this);
        btn_clear.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {

        switch (v.getId()) {

            case R.id.btn_00:
                existedText = isOverRange(existedText, "00");
                break;
            case R.id.btn_0:
                existedText = isOverRange(existedText, "0");
                break;
            case R.id.btn_1:
                existedText = isOverRange(existedText, "1");
                break;
            case R.id.btn_2:
                existedText = isOverRange(existedText, "2");
                break;
            case R.id.btn_3:
                existedText = isOverRange(existedText, "3");
                break;
            case R.id.btn_4:
                existedText = isOverRange(existedText, "4");
                break;
            case R.id.btn_5:
                existedText = isOverRange(existedText, "5");
                break;
            case R.id.btn_6:
                existedText = isOverRange(existedText, "6");
                break;
            case R.id.btn_7:
                existedText = isOverRange(existedText, "7");
                break;
            case R.id.btn_8:
                existedText = isOverRange(existedText, "8");
                break;
            case R.id.btn_9:
                existedText = isOverRange(existedText, "9");
                break;

            case R.id.btn_plus:

                if (!existedText.contains("e")) {

                    if (judgeExpression()) {
                        existedText = getResult();
                    } else {

                        if (isCounted) {
                            isCounted = false;
                        }
                            if (!(existedText.substring(existedText.length() - 1)).equals("+")) {
                            existedText += "+";
                        }
                    }
                } else {
                    existedText = "0";
                }


                break;

            case R.id.btn_pay:
                existedText = getResult();
                isCounted = true;
                String Message = ed_m.getText().toString();
                Intent intent=new Intent(MainActivity.this,PayActivity.class);
                Bundle bundle = new Bundle();
                bundle.putString("Message",Message);
                intent.putExtras(bundle);
                startActivity(intent);
                break;

            case R.id.btn_point:

                if (!isCounted) {

                    if (existedText.contains("+")) {

                        String param1 = null;
                        String param2 = null;

                        if (existedText.contains("+")) {
                            param1 = existedText.substring(0, existedText.indexOf("+"));
                            param2 = existedText.substring(existedText.indexOf("+") + 1);
                       }
                        Log.d("Anonymous param1", param1);
                        Log.d("Anonymous param2", param2);

                        boolean isContainedDot = param2.contains(".");
                        if (param2.length() >= 9) {

                        } else {
                            if (!isContainedDot) {
                                if (param2.equals("")) {
                                    existedText += "0.";
                                } else {
                                    existedText += ".";
                                }
                            } else {
                                return;
                            }
                        }
                    } else {
                        boolean isContainedDot = existedText.contains(".");
                        if (existedText.length() >= 9) {

                        } else if (!isContainedDot) {
                            existedText += ".";
                        } else {
                            return;
                        }
                    }
                    isCounted = false;

                } else {
                    existedText = "0.";
                    isCounted = false;
                }


                break;

            case R.id.btn_clear:

                if (existedText.equals("error")) {
                    existedText = "0";
                } else if (existedText.length() > 0) {
                    if (existedText.length() == 1) {
                        existedText = "0";
                    } else {
                        existedText = existedText.substring(0, existedText.length() - 1);
                    }
                }
                break;

        }

        ed_m.setText(existedText);
    }


    private String getResult() {

        String tempResult = null;

        String param1 = null;
        String param2 = null;

        double arg1 = 0;
        double arg2 = 0;
        double result = 0;

        getCondition();

        if (startWithOperator || noStartWithOperator || startWithSubtract) {

            if (existedText.contains("+")) {

                param1 = existedText.substring(0, existedText.indexOf("+"));
                param2 = existedText.substring(existedText.indexOf("+") + 1);

                if (param2.equals("")) {
                    tempResult = existedText;
                } else {

                    arg1 = Double.parseDouble(param1);
                    arg2 = Double.parseDouble(param2);
                    result = arg1 + arg2;
                    tempResult = String.format("%f", result);
                    tempResult = subZeroAndDot(tempResult);
                }


            }

            if (tempResult.length() >= 10) {
                tempResult = String.format("%e", Double.parseDouble(tempResult));
            } else if (tempResult.contains(".")) {
                if (tempResult.substring(0, tempResult.indexOf(".")).length() >= 10) {
                    tempResult = String.format("%e", Double.parseDouble(tempResult));
                }
            }
        } else {
            tempResult = existedText;
        }

        return tempResult;
    }

    private String isOverRange(String existedText, String s) {

        if (!isCounted) {

            if (existedText.contains("e")) {
                existedText = "0";
            }

            if (existedText.equals("0")) {
                existedText = "";
            }

            if (existedText.contains("+")) {
                String param2 = null;
                if (existedText.contains("+")) {
                    param2 = existedText.substring(existedText.indexOf("+") + 1);
                }

//            Log.d("Anonymous param1",param1);
            Log.d("Anonymous param2",param2);
                if (existedText.substring(existedText.length() - 1).equals("+")) {
                    existedText += s;
                } else {
                    if (param2.contains(".")) {
                        if (param2.length() >= 10) {

                        } else {
                            existedText += s;
                        }
                    } else {
                        if (param2.length() >= 9) {

                        } else {
                            existedText += s;
                        }
                    }
                }
            } else {

                if (existedText.contains(".")) {
                    if (existedText.length() >= 10) {

                    } else {
                        existedText += s;
                    }
                } else {
                    if (existedText.length() >= 9) {

                    } else {
                        existedText += s;
                    }
                }
            }

            isCounted = false;

        } else {

            existedText = s;
            isCounted = false;

        }


        return existedText;
    }

    public static String subZeroAndDot(String s) {
        if (s.indexOf(".") > 0) {
            s = s.replaceAll("0+?$", "");
            s = s.replaceAll("[.]$", "");
        }
        return s;
    }

    private boolean judgeExpression() {

        getCondition();

        String tempParam2 = null;

        if (startWithOperator || noStartWithOperator || startWithSubtract) {

            if (existedText.contains("+")) {

                tempParam2 = existedText.substring(existedText.indexOf("+") + 1);

                if (tempParam2.equals("")) {
                    return false;
                } else {
                    return true;
                }
            }

        }
        return false;
    }


    private void getCondition() {
        startWithOperator = existedText.startsWith("-") && (existedText.contains("+") ||
                existedText.contains("×") || existedText.contains("÷"));

        startWithSubtract = existedText.startsWith("-") && (existedText.lastIndexOf("-") != 0);

        noStartWithOperator = !existedText.startsWith("-") && (existedText.contains("+") ||
                existedText.contains("-") || existedText.contains("×") || existedText.contains("÷"));
    }

}
